<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	{
		// 1- then函数是Promise实例原型中的方法
		// 2- then函数返回的值是一个Promise实例
		// const p = new Promise((resolve,reject)=>{
		//
		// });
		// const p1 = p.then(function(){
		//
		// },function(){
		//
		// });
		// console.log(p1);// 状态pending，值undefined
	}
	{
		// then指定的成功回调与失败回调是异步执行的。
		// const p = new Promise((resolve,reject)=>{
		// 	resolve(1);
		// });
		// p.then(value=>{
		// 	console.log("2-成功回调",value);
		// },reason=>{
		// 	console.log("失败回调",reason);
		// });
		// console.log("1-over");
	}
	{
		// p1是一个Promise实例，p1实例的状态和值由执行的成功或失败回调函数决定。
		// 也是就p的状态为成功，成功回调决定p1的状态和值
		// 也是就p的状态为失败，失败回调决定p1的状态和值
		// 1- 如果回调函数返回的是一个非Promise实例，那么p1状态为成功，值为返回值
		{
			// const p = new Promise((resolve,reject)=>{
			// 	resolve(1);
			// });
			// const p1 = p.then(value=>{
			// 	console.log("成功回调",value);
			// },reason=>{
			// 	console.log("失败回调",reason);
			// });
			// console.log(p1);// fulfilled  undefined
		}
		{
			// const p = new Promise((resolve,reject)=>{
			// 	resolve(1);
			// });
			// const p1 = p.then(value=>{
			// 	console.log("成功回调",value);
			// 	return 100;
			// },reason=>{
			// 	console.log("失败回调",reason);
			// });
			// console.log(p1);// fulfilled  100
		}
		{
			// 如果回调函数返回的是一个非Promise实例，那么p1状态为成功，值为返回值
			// const p = new Promise((resolve,reject)=>{
			// 	reject(1);
			// });
			// const p1 = p.then(value=>{
			// 	console.log("成功回调",value);
			// 	return 100;
			// },reason=>{
			// 	console.log("失败回调",reason);
			// 	return 200;
			// });
			// console.log(p1);// fulfilled  200
		}
		// 2- then函数返回的永远都是一个新的Promise实例。
		//      如果执行的回调函数返回的是一个Promise,那么得到p1的状态以及值与回调函数返回的Promise状态和值相同。
		{
			// const p = new Promise((resolve,reject)=>{
			// 	resolve(1);
			// });
			// const p1 = p.then(value=>{
			// 	console.log("成功回调",value);
			// 	return new Promise(()=>{
			//
			// 	});
			// },reason=>{
			// 	console.log("失败回调",reason);
			// 	return 200;
			// });
			// console.log(p1);// pending  undefined
		}
		{
			// const p = new Promise((resolve,reject)=>{
			// 	reject(1);
			// });
			// const p1 = p.then(value=>{
			// 	console.log("成功回调",value);
			// 	return new Promise((resolve,reject)=>{
			// 		reject(200)
			// 	});
			// },reason=>{
			// 	console.log("失败回调",reason);
			// 	return new Promise((resolve,reject)=>{
			// 		reject(9)
			// 	});
			// });
			// console.log(p1);// rejected  9
		}
		// 3- 如果回调函数有异常，那么p1状态为失败，值为失败信息
		{
			// const p = new Promise((resolve,reject)=>{
			// 	resolve(1);
			// });
			// const p1 = p.then(value=>{
			// 	console.log("成功回调",value);
			// 	throw "异常1";
			// 	return new Promise((resolve,reject)=>{
			// 		reject(200)
			// 	});
			// },reason=>{
			// 	console.log("失败回调",reason);
			// 	throw "异常";
			// 	return new Promise((resolve,reject)=>{
			// 		reject(9)
			// 	});
			// });
			// console.log(p1);// rejected  异常
		}
		
	}
	{
		// then返回的是一个新的Promise
		// const p = new Promise(resolve=>{
		// 	resolve(100)
		// })
		// const p2 = new Promise((resolve, reject)=>{
		// 	reject(200);
		// })
		// const p1 = p.then(value=>{
		// 	return p2
		// })
		// console.log(p1 === p2);// false
	}
	{
		// 如果成功以及失败回调没有调用，那么p1的状态和值是：pending undefined
		// const p = new Promise(function(){
		//
		// });
		// const p1 = p.then(value=>{
		//
		// },reason=>{
		//
		// });
		// console.log(p1);// pending undefined
	}
	{
		// then是允许被多次调用的。
		const p = new Promise(function(resolve,reject){
			resolve(100)
		});
		p.then(value=>{
			console.log("value")
		})
		p.then(value=>{
			console.log("value")
		})
		p.then(value=>{
			console.log("value")
		})
		p.then(value=>{
			console.log("value")
		})
	}
</script>
</html>